//*********************************************************
//
//    Copyright (c) Microsoft. All rights reserved.
//    This code is licensed under the Apache License, Version 2.0.
//    THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
//    ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
//    IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
//    PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

namespace Microsoft.Research.ScientificWorkflow.TridentModel
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;

    /// <summary>
    /// The delete behavior when the activity is being deleted.
    /// </summary>
    public enum ActivityDeleteBehavior
    {
        /// <summary>
        /// Delete the activity itself.
        /// </summary>
        DeleteSelf,

        /// <summary>
        /// Delete only the children not the activity itself.
        /// </summary>
        DeleteChildren,

        /// <summary>
        /// Deletion not possible.
        /// </summary>
        DeleteInvalid
    }

    /// <summary>
    /// The execution state of this activity. Default state is None.
    /// </summary>
    public enum TridentActivityExecutionStatus
    {
        /// <summary>
        /// Denotes no execution.
        /// </summary>
        None,

        /// <summary>
        /// Denotes the execution is completed.
        /// </summary>
        Closed,

        /// <summary>
        /// Denotes the execution is in progress.
        /// </summary>
        Executing,

        /// <summary>
        /// Denotes a fault in the execution.
        /// </summary>
        Faulting
    }

    /// <summary>
    /// Specifies how the activity and its parameters are to be represented.
    /// </summary>
    [Serializable]
    public class ActivityModelVisibility
    {
        /// <summary>
        /// Gets or sets the visibility of the activity.
        /// </summary>
        public Visibility ActivityVisibility
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the visibility of the activity parameters.
        /// </summary>
        public Visibility ActivityParametersVisibility
        {
            get;
            set;
        }

        /// <summary>
        /// Specifies how the activity and its parameters are to be represented.
        /// </summary>
        /// <param name="activityVisibility">
        /// Visibility of the activity.
        /// </param>
        /// <param name="activityParametersVisibility">
        /// Visibility of the activity parameters.
        /// </param>
        public ActivityModelVisibility(Visibility activityVisibility, Visibility activityParametersVisibility)
        {
            this.ActivityVisibility = activityVisibility;
            this.ActivityParametersVisibility = activityParametersVisibility;
        }
    }
}
